// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:_foreign_helper' show ArrayFlags, HArrayFlagsCheck;
import 'dart:typed_data';

import 'package:expect/expect.dart';

void rub(Object object, String message) {
  try {
    // Always fail, using non-standard operation name and verb.
    HArrayFlagsCheck(
      object,
      ArrayFlags.unmodifiable,
      ArrayFlags.fixedLengthCheck,
      'rub',
      'burnish',
    );
    Expect.fail('HArrayFlagsCheck should always throw');
  } catch (e) {
    Expect.equals(message, e.toString());
  }
}

main() {
  rub(const [], "Unsupported operation: 'rub': Cannot burnish a constant list");
  rub(
    List.unmodifiable([]),
    "Unsupported operation: 'rub': Cannot burnish an unmodifiable list",
  );
  rub(
    List.filled(0, 0),
    "Unsupported operation: 'rub': Cannot burnish a fixed-length list",
  );
  rub([], "Unsupported operation: 'rub': Cannot burnish a list");

  rub(
    Uint8List(10).asUnmodifiableView(),
    "Unsupported operation: 'rub': Cannot burnish an unmodifiable list",
  );

  rub(
    ByteData(10).asUnmodifiableView(),
    "Unsupported operation: 'rub': Cannot burnish an unmodifiable ByteData",
  );
}
